package Datas_Structure.Tree;

/**
 * 顺序存储的二叉树通常情况只考虑完全二叉树
 * 第n个元素的左子节点是：2*n+1   n索引的位置（从0开始）
 * 第n个元素的右子节点是：2*n+2
 * 第n个元素的父节点是：(n-1)/2
 * 线索化二叉树：
 * 线索化二叉树时，一个节点的前一个节点，叫前驱节点
 * 线索化二叉树时，一个节点的后一个节点，叫后继节点
 */
public class ArraybinaryTree {
    int[] data;

    public ArraybinaryTree(int[] data) {
        this.data = data;
    }

    /**
     * 前序遍历
     */
    public void frontShow(int index) {
        //判断节点是否为空或长度为0
        if (data == null || data.length == 0) {
            return;
        }
        //先遍历当前节点
        System.out.print(data[index] + " ");
        //处理左子树
        if (2 * index + 1 < data.length) {
            frontShow(2 * index + 1);
        }
        //处理右子树
        if (2 * index + 2 < data.length) {
            frontShow(2 * index + 2);
        }
    }
    //重载frontShow
    public void frontShow(){
        frontShow(0);
    }
}

class TestArraybinaryTree{
    public static void main(String[] args) {
        int[] data ={1,2,3,4,5,6,7};
        ArraybinaryTree arraybinaryTree = new ArraybinaryTree(data);
        //前序遍历
        arraybinaryTree.frontShow();
    }
}